modal window実験
背景
modal windowの背景クリックを検知できないというバグが有る
scrapboxのmodal windowをベースに作るのではなく、display: flex;で簡単に中央揃えできないか試したい
2022-08-26
14:34:51 単なるprogramのミスだった
HTMLElement.hiddenだとうまく隠せなかっただけ
display: none;を使えばちゃんと開閉できた
Event.composedPath()で取得できるみたい
Shadow DOMとイベント https://ja.javascript.info/shadow-dom-events#ref-937]
14:21:38 Shadow DOMを使うと、Event.targetからもEvent.currentTargetからもクリックされた要素を取得できなくなるのか
あれ?じゃあなんでtakker99/ScrapBubbleでは要素を取得できているんだ?
Event.currentTargetではなくEvent.targetを使う
Event.currentTargetだと、event listenerを登録した要素を取得してしまう
code:app.tsx
/// <reference no-default-lib="true" />
/// <reference lib="esnext" />
/// <reference lib="dom" />
/** @jsx h */
/** @jsxFrag Fragment */
import { Fragment, h, render, useCallback, useState, useMemo, useEffect, useRef, ComponentChildren } from "./preact.tsx";
import {
encodeTitleURI,
sleep,
} from "../scrapbox-userscript-std/dom.ts";
const App = () => {
const closed, setClosed = useState(false);
const handleClick = useCallback((e) => {
console.debug(e.target);
console.debug(e.currentTarget);
if (e.target.id !== "background") return;
setClosed(true);
}, []);
return (<>
<style>{`
.modal {
position: fixed;
inset: 0;
z-index: 1050;
display: flex;
justify-content: center;
background-color: rgba(0,0,0,.8);
}
.closed {
display: none;
}
.content {
width: 600px;
margin: 30px auto;
background-color: var(--dropdown-menu-bg, #fff);
color: var(--page-text-color, #4a4a4a);
border: 1px solid rgba(0,0,0,.2);
border-radius: 6px;
}
`}</style>
<div id="background" className={modal${closed ? " closed" : ""}} onClick={handleClick}>
<div className="content">
テスト
</div>
</div>
</>)
};
const app = document.createElement("div");
const shadowRoot = app.attachShadow({ mode: "open" });
document.body.append(app);
render(<App />, shadowRoot);
code:preact.tsx
export { Fragment, h, render } from "https://esm.sh/preact@10.6.4";
export type { ComponentChildren } from "https://esm.sh/preact@10.6.4";
export * from "https://esm.sh/preact@10.6.4/hooks";
#2022-09-06 14:43:02
#2022-08-26 14:01:46